home *** CD-ROM | disk | FTP | other *** search
- /*
- * Key Map Editor ver 1.0
- * Process Menu
- *
- * parameter: Code - Code returned by IDCMP
- * returns: True if execute should be continued
- * False if Quit option selected
- *
- * by: Tim Friest
- * on: January 1, 1989
- */
-
- #include "KME_Includes.h"
- #include "KME_Protos.h"
- #include "KME_Defs.h"
- #include "KME_Pointers.h"
- #include "KME_Globals.h"
-
- extern UBYTE FileNameBuff[30];
-
- int ProcMenu(Code)
- unsigned short Code;
- {
- int Num, Item;
-
- Num = MENUNUM(Code);
- Item = ITEMNUM(Code);
-
- switch (Num) {
- case 0: /* Project Menu */
- switch (Item) {
- case 0: /* Load KeyMap */
- KeyMapIO(FileNameBuff, LOAD);
- break;
- case 1: /* New KeyMap */
- KeyMapNode = MakeNewKeyMap();
- break;
- case 2: /* Save KeyMap */
- KeyMapIO(FileNameBuff, SAVE);
- break;
- case 4: /* Exit Editor */
- if (CheckFlag(SF_Modified))
- return(!VerifyReq());
- else
- return(FALSE);
- }
- break;
- case 1: /* Options Menu */
- switch (Item) {
- case 0: /* Define Key Codes */
- ClearFlag((SF_Define|SF_Copy|SF_Move|SF_Swap|SF_Clear));
- FromKeyGad = NULL;
- SetFlag(SF_Define);
- if (CheckFlag(SF_Pointer))
- ChangePointer(0);
- break;
- case 1: /* Copy Key Codes */
- ClearFlag((SF_Define|SF_Copy|SF_Move|SF_Swap|SF_Clear));
- FromKeyGad = NULL;
- SetFlag(SF_Copy);
- ChangePointer(SF_Copy);
- break;
- case 2: /* Move Key Codes */
- ClearFlag((SF_Define|SF_Copy|SF_Move|SF_Swap|SF_Clear));
- FromKeyGad = NULL;
- SetFlag(SF_Move);
- ChangePointer(SF_Move);
- break;
- case 3: /* Swap Key Codes */
- ClearFlag((SF_Define|SF_Copy|SF_Move|SF_Swap|SF_Clear));
- FromKeyGad = NULL;
- SetFlag(SF_Swap);
- ChangePointer(SF_Swap);
- break;
- case 4: /* Clear Key Codes */
- ClearFlag((SF_Define|SF_Copy|SF_Move|SF_Swap|SF_Clear));
- FromKeyGad = NULL;
- SetFlag(SF_Clear);
- ChangePointer(SF_Clear);
- }
- }
- return(TRUE);
- }
-
- /*
- * Make New Key Map
- *
- * returns: KeyMapNode - KeyMapNode Pointer
- */
- struct KeyMapNode *MakeNewKeyMap()
- {
- struct KeyMapNode *NewKeyMapNode;
- UBYTE *ptr;
- USHORT code;
-
- if (CheckResource(RF_KeyMap))
- FreeKeyMap(KeyMapNode);
- if ((NewKeyMapNode = (struct KeyMapNode *)AllocMem((KeyNodeSize + KeyMapSize), MEMF_CLEAR)) == NULL) {
- Write(Output(), "Memory Allocation failed, MakeNewKeyMapNode\n", 44);
- return(NULL);
- }
- ptr = (UBYTE *)NewKeyMapNode;
- NewKeyMapNode->kn_KeyMap.km_LoKeyMapTypes = (UBYTE *)&ptr[KeyNodeSize];
- NewKeyMapNode->kn_KeyMap.km_LoKeyMap = (ULONG *)&ptr[KeyNodeSize + 0x40];
- NewKeyMapNode->kn_KeyMap.km_LoCapsable = (UBYTE *)&ptr[KeyNodeSize + 0x40 + 0x40*4];
- NewKeyMapNode->kn_KeyMap.km_LoRepeatable = (UBYTE *)&ptr[KeyNodeSize + 0x40 + 0x40*4 + 8];
- NewKeyMapNode->kn_KeyMap.km_HiKeyMapTypes = (UBYTE *)&ptr[KeyNodeSize + (0x40 + 0x40*4 + 8 + 8)];
- NewKeyMapNode->kn_KeyMap.km_HiKeyMap = (ULONG *)&ptr[KeyNodeSize + (0x40 + 0x40*4 + 8 + 8) + 0x38];
- NewKeyMapNode->kn_KeyMap.km_HiCapsable = (UBYTE *)&ptr[KeyNodeSize + (0x40 + 0x40*4 + 8 + 8) + 0x38 + 0x38*4];
- NewKeyMapNode->kn_KeyMap.km_HiRepeatable = (UBYTE *)&ptr[KeyNodeSize + (0x40 + 0x40*4 + 8 + 8) + 0x38 + 0x38*4 + 7];
- for (code = 0; code < 0x40; code++)
- NewKeyMapNode->kn_KeyMap.km_LoKeyMapTypes[code] = KCF_NOP;
- for (code = 0; code < 0x38; code++)
- NewKeyMapNode->kn_KeyMap.km_HiKeyMapTypes[code] = KCF_NOP;
- FlagResource(RF_KeyMap);
- UpdateDisplay(GadgetList, NewKeyMapNode, TRUE);
- return(NewKeyMapNode);
- }
-
- /*
- * Verify Requester
- */
-
- struct IntuiText VerifyReqMsg = {
- 0, 1, JAM1,
- 15, 20,
- NULL,
- "Key Map has been Modified",
- NULL
- };
- struct IntuiText ContinueReqMsg = {
- 0, 1, JAM1,
- 6, 3,
- NULL,
- "Continue",
- NULL
- };
- struct IntuiText CancelReqMsg = {
- 0, 1, JAM1,
- 6, 3,
- NULL,
- "Cancel",
- NULL
- };
-
- int VerifyReq()
- {
- return(AutoRequest(KeyMapEdWindow, &VerifyReqMsg, &ContinueReqMsg,
- &CancelReqMsg, NULL, NULL, 250, 75));
- }
-
- /*
- * Change Pointer
- *
- * Parameter: Option - Option bit from StatusFlags
- */
- void ChangePointer(Option)
- unsigned long Option;
- {
- switch (Option) {
- case 0:
- SetPointer(KeyMapEdWindow, NULL, 0, 0, 0, 0);
- ClearFlag(SF_Pointer);
- break;
- case SF_Copy:
- SetPointer(KeyMapEdWindow, (short *)CopyPtrSpriteImage, 31, 12, -2, -1);
- SetFlag(SF_Pointer);
- break;
- case SF_Move:
- SetPointer(KeyMapEdWindow, (short *)MovePtrSpriteImage, 28, 15, -2, -2);
- SetFlag(SF_Pointer);
- break;
- case SF_Swap:
- SetPointer(KeyMapEdWindow, (short *)SwapPtrSpriteImage, 30, 14, -2, -2);
- SetFlag(SF_Pointer);
- break;
- case SF_Clear:
- SetPointer(KeyMapEdWindow, (short *)ClearPtrSpriteImage, 33, 16, -2, -3);
- SetFlag(SF_Pointer);
- break;
- case -1:
- SetPointer(KeyMapEdWindow, (short *)ToPtrSpriteImage,17, 11, -2, -1);
- SetFlag(SF_Pointer);
- } /* switch */
- }
-